package org.yoki.edu.bg.radius.web.api.server;

import org.yoki.edu.bg.radius.vo.server.ServerVO;
import org.yoki.edu.bg.radius.web.api.command.IdsCommand;
import org.yoki.edu.bg.radius.web.api.server.command.ServerCreateCommand;
import org.yoki.edu.bg.radius.web.api.server.command.ServerPageCommand;
import org.yoki.edu.bg.radius.web.api.server.command.ServerUpdateCommand;
import com.yunzhitx.cloud.common.model.InvokeResult;
import com.yunzhitx.cloud.common.model.PageResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.hibernate.validator.constraints.NotBlank;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;

/**
* 代码生成器自动生成
* Date:2018-1-31 15:03:16
* @author
*/
@Api(value = "ServerService", description = "Server相关AIP", tags = "ServerService")
@RequestMapping(value = "server")
public interface ServerService{

    /* ************************************************************************************ *
       ***************************************  增  ***************************************
    * ************************************************************************************* */

    /**
    * 新增Server
    *
    * @param command
    * @return
    */
    @PostMapping("add")
    @ApiOperation(value = "新增Server")
    InvokeResult<ServerVO> add(@RequestBody @Valid ServerCreateCommand command);

    /* ************************************************************************************ *
       ***************************************  删  ***************************************
    * ************************************************************************************* */

    /**
     * 根据Id，删除
     *
     * @param id
     * @return
     */
    @GetMapping("deleteById")
    @ApiOperation(value = "根据Id，删除模板")
    InvokeResult deleteById(@RequestParam("id") @NotNull Integer id);

    /**
     * 根据Id，删除
     *
     * @param command
     * @return
     */
    @PostMapping("deleteByIds")
    @ApiOperation(value = "根据Id，删除模板")
    InvokeResult deleteByIds(@RequestBody @Valid IdsCommand command);

    /**
     * 根据Ip地址，删除
     *
     * @param ipAddr
     * @return
     */
    @GetMapping("deleteByIpAddr")
    @ApiOperation(value = "根据Ip地址，删除")
    InvokeResult deleteByIpAddr(@RequestParam("ipAddr") @NotBlank String ipAddr);

    /* ************************************************************************************ *
       ***************************************  改  ***************************************
    * ************************************************************************************* */

    /**
    * 根据Id，更新Server
    *
    * @param command
    * @return
    */
    @PostMapping("update")
    @ApiOperation(value = "根据Id，更新Server", httpMethod = "POST")
    InvokeResult<ServerVO> update(@RequestBody @Valid ServerUpdateCommand command);

    /**
     * 根据isWork状态，更新Server
     *
     * @param isWork
     * @return
     */
    @GetMapping("updateWorkState")
    @ApiOperation(value = "根据isWork状态，更新Server", httpMethod = "GET")
    InvokeResult updateWorkState(@RequestParam("id") @NotNull Integer id ,
                                           @RequestParam("isWork") @NotNull Boolean isWork);

    /* ************************************************************************************ *
       ***************************************  查  ***************************************
    * ************************************************************************************* */

    /**
    * 根据ID获取Server
    * @param id
    * @return
    */
    @GetMapping("getDetailById")
    @ApiOperation(value = "根据ID获取Server", httpMethod = "GET")
    InvokeResult<ServerVO> getDetailById(@RequestParam("id") @NotNull int id);

    /**
     * 根据分页参数以及条件参数获取Server分页列表
     *
     * @param page
     * @param command
     * @return
     */
    @GetMapping("getPage")
    @ApiOperation(value = "根据分页参数以及条件参数获取Server分页列表")
    InvokeResult<PageResult<ServerVO>> getPage(PageResult page, @Valid ServerPageCommand command);

    /**
     * 获取Server列表
     *
     * @return
     */
    @GetMapping("getList")
    @ApiOperation(value = "获取Server列表")
    InvokeResult<PageResult<ServerVO>> getList();

}